package com.elitedatai.mchtest.mission.service;

import com.dji.sdk.common.HttpResultResponse;
import com.elitedatai.mchtest.common.model.CustomClaim;
import com.elitedatai.mchtest.mission.entity.FlightPlan;
import com.elitedatai.mchtest.mission.model.dto.FlightPlanDTO;
import com.elitedatai.mchtest.wayline.model.param.CreateJobParam;
import jakarta.validation.Valid;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

public interface IFlightPlanService {

     /**
     * 创建飞行计划
     * @param flightPlanDTO 飞行计划数据传输对象
     * @return 创建航线任务参数
     */
    CreateJobParam createFlightPlan(FlightPlanDTO flightPlanDTO);

    HttpResultResponse publishFlightTask(@Valid CreateJobParam param, CustomClaim customClaim);
    
    /**
     * 分页查询所有飞行计划
     * @param pageable 分页参数
     * @return 飞行计划分页数据
     */
    Page<FlightPlanDTO> getAllFlightPlans(Pageable pageable);
    
    /**
     * 根据状态分页查询飞行计划
     * @param status 状态
     * @param pageable 分页参数
     * @return 飞行计划分页数据
     */
    Page<FlightPlanDTO> getFlightPlansByStatus(Integer status, Pageable pageable);
    
    /**
     * 根据机场序列号分页查询飞行计划
     * @param dockSn 机场序列号
     * @param pageable 分页参数
     * @return 飞行计划分页数据
     */
    Page<FlightPlanDTO> getFlightPlansByDockSn(String dockSn, Pageable pageable);
    
    /**
     * 根据飞手ID分页查询飞行计划
     * @param flyerId 飞手ID
     * @param pageable 分页参数
     * @return 飞行计划分页数据
     */
    Page<FlightPlanDTO> getFlightPlansByFlyerId(String flyerId, Pageable pageable);

    FlightPlan getFlightPlanByPlanId(String planId);

    FlightPlan save(FlightPlan flightPlan);
    
    /**
     * 根据任务ID更新飞行计划状态
     * @param jobId 任务ID
     * @param status 新状态
     */
    void updateStatusByJobId(String jobId, Integer status);
}
